# vim:set et sts=4 sw=4:
#
# ibus-pinyin - The PinYin engine for IBus
#
# Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

import os
import sys
import getopt
import ibus
import gobject
import factory

class IMApp:
	def __init__(self, exec_by_ibus):
		self.__component = ibus.Component("org.freedesktop.IBus.NaturalPinyin",
										  "Chinese Natural Pinyin Component",
										  "0.1.0",
										  "GPL",
										  "Yu Fan <yufanyufan@gmail.com>")
		self.__component.add_engine("natural-pinyin-jianpin",
									"Natural Jianpin",
									"Continuous PinYin Input Method",
									"zh_CN",
									"GPL",
									"Yu Fan <yufanyufan@gmail.com>",
									"",
									"en")
		self.__component.add_engine("natural-pinyin-quanpin",
									"Natural Quanpin",
									"Continuous PinYin Input Method",
									"zh_CN",
									"GPL",
									"Yu Fan <yufanyufan@gmail.com>",
									"",
									"en")
		self.__component.add_engine("natural-pinyin-shuangpin",
									"Natural Shuangpin",
									"Continuous PinYin Input Method",
									"zh_CN",
									"GPL",
									"Yu Fan <yufanyufan@gmail.com>",
									"",
									"en")
		self.__mainloop = gobject.MainLoop()
		self.__bus = ibus.Bus()
		self.__bus.connect("destroy", self.__bus_destroy_cb)
		self.__factory = factory.EngineFactory(self.__bus)
		if exec_by_ibus:
			self.__bus.request_name("org.freedesktop.IBus.NaturalPinyin", 0)
		else:
			self.__bus.register_component(self.__component)

	def run(self):
		self.__mainloop.run()

	def __bus_destroy_cb(self, bus):
		self.__mainloop.quit()


def launch_engine(exec_by_ibus):
	IMApp(exec_by_ibus).run()

def print_help(out, v = 0):
	print >> out, "-i, --ibus			 execute by ibus."
	print >> out, "-h, --help			 show this message."
	print >> out, "-d, --daemonize		daemonize ibus"
	sys.exit(v)

def main():
	daemonize = False
	exec_by_ibus = False
	shortopt = "hdi"
	longopt = ["help", "daemonize", "ibus"]
	try:
		opts, args = getopt.getopt(sys.argv[1:], shortopt, longopt)
	except getopt.GetoptError, err:
		print_help(sys.stderr, 1)
	print "main",  opts, args
	for o, a in opts:
		if o in("-h", "--help"):
			print_help(sys.stdout)
		elif o in ("-d", "--daemonize"):
			daemonize = True
		elif o in ("-i", "--ibus"):
			exec_by_ibus = True
		else:
			print >> sys.stderr, "Unknown argument: %s" % o
			print_help(sys.stderr, 1)

	if daemonize:
		if os.fork():
			sys.exit()

	launch_engine(exec_by_ibus)

if __name__ == "__main__":
	main()
